Databases often contain large numbers of vitally important records for a company. These records can include human resource, corporate, financial, legal, medical, and other records. Implementations of an enterprise database system typically use table-based data structures to store the records. Table-based structures are naturally suited to searching the entire database for a given piece of data or to producing sorted lists of data; however, they are not practical for some other database functions such as logging and security. Specifically, if it is desirable to maintain a log of the changes to each piece of data over time, use of a table-based data structure will result in an inefficient use of storage space, as entire rows are duplicated whenever a single piece of data is modified. In addition, table-based data structures also do not adapt easily to the use of a security model, where different database users are allowed access to different subsets of the data depending on their level of security access.
In contrast, storing information in an object-based database, in which information is stored over a large collection of linked objects rather than in a single large table, allows a security model to be enforced by restricting users access to certain parts of the database, and also allows efficient logging of data modifications by maintaining a log of changes to each object within the object itself. However, searching an object-based database, due to its distributed nature, may not be as simple or as efficient as searching a table-based database.